package org.andengine.util.adt.bounds;

import org.andengine.util.adt.spatial.bounds.util.IntBoundsUtils;

/**
 * (c) Zynga 2011
 *
 * @author Nicolas Gramlich <ngramlich@zynga.com>
 * @since 21:45:04 - 11.11.2011
 */
public class IntBounds implements IIntBounds {
    // ===========================================================
    // Constants
    // ===========================================================

    // ===========================================================
    // Fields
    // ===========================================================

    private int mXMin;
    private int mYMin;
    private int mXMax;
    private int mYMax;

    // ===========================================================
    // Constructors
    // ===========================================================

    public IntBounds(final int pX, final int pY) {
        this.set(pX, pY);
    }

    public IntBounds(final int pXMin, final int pYMin, final int pXMax, final int pYMax) {
        this.set(pXMin, pYMin, pXMax, pYMax);
    }

    // ===========================================================
    // Getter & Setter
    // ===========================================================

    @Override
    public int getXMin() {
        return this.mXMin;
    }

    @Override
    public int getYMin() {
        return this.mYMin;
    }

    @Override
    public int getXMax() {
        return this.mXMax;
    }

    @Override
    public int getYMax() {
        return this.mYMax;
    }

    public void set(final int pX, final int pY) {
        this.set(pX, pY, pX, pY);
    }

    public void set(final int pXMin, final int pYMin, final int pXMax, final int pYMax) {
        this.mXMin = pXMin;
        this.mYMin = pYMin;
        this.mXMax = pXMax;
        this.mYMax = pYMax;

        if (pXMin > pXMax) {
            throw new IllegalArgumentException("pXMin: '" + pXMin + "' must be smaller or equal to pXMax: '" + pXMax + "'.");
        }
        if (pYMin > pYMax) {
            throw new IllegalArgumentException("pYMin: '" + pYMin + "' must be smaller or equal to pYMax: '" + pYMax + "'.");
        }
    }

    // ===========================================================
    // Methods for/from SuperClass/Interfaces
    // ===========================================================

    public boolean contains(final int pX, final int pY) {
        return IntBoundsUtils.contains(this.mXMin, this.mYMin, this.mXMax, this.mYMax, pX, pY);
    }

    // ===========================================================
    // Methods
    // ===========================================================

    // ===========================================================
    // Inner and Anonymous Classes
    // ===========================================================
}
